package com.wyw.design.model.learning.behavioral.template;

/**
 * @Title   抽象模板
 * @Description
 * @Author Mr Wu yewen.wu.china@gmail.com
 * @Date 2023/4/19 16:58
 * Update History:
 * Author        Time            Content
 */
public abstract class AbstractTemplate {
    // 模板方法
    public void templateMethod() {
        //（所有）基本方法
        abstractMethod();
        hookMethod();
        concreteMethod();
    }
    // 抽象方法，必须有子类实现
    protected abstract void abstractMethod();
    // 钩子方法，子类可以选择重写或不重写
    protected void hookMethod() {
    }
    // 具体方法，子类不可修改
    private final void concreteMethod() {
        System.out.println("抽象类中的具体方法");
    }
}
